/**

给定一个二叉搜索树，同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树，使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点，所以结果应当返回修剪好的二叉搜索树的新的根节点。

示例 1:

输入: 
    1
   / \
  0   2

  L = 1
  R = 2

输出: 
    1
      \
       2

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/trim-a-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。


 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* trimBSTHelper(TreeNode* node, int L, int R)
    {
        if(node == 0)
            return 0;
        if(node->val >=L &&node->val <= R)
        {
            node->left = trimBSTHelper(node->left,L,R);
            node->right = trimBSTHelper(node->right,L,R);
            
        }
        if(node->val<L)
        { 
            return trimBSTHelper(node->right,L,R);
        }
        
        if(node->val > R)
        {
            return trimBSTHelper(node->left,L,R);
        }

        return node;    

    }

    TreeNode* trimBST(TreeNode* root, int L, int R) {
        TreeNode* node = trimBSTHelper(root,  L, R);
        return node;
    }
};